from importlib import metadata
import subprocess

# 首先，我们需要安装 pipreqs。可以使用 pip（Python 包安装器）来安装 pipreqs：
# pip install pipreqs
# 或者，如果你在系统中安装了多个 Python 版本，你可能需要显式指定要用于运行 pip 的 Python 版本：
# python3.9 -m pip install pipreqs
# 安装完成后，你应该就能使用 pipreqs 命令了。你可以这样运行它来生成 requirements.txt 文件：
# pipreqs /mnt/01_code/python/rosbag_analysis
# 请注意，你需要将上述命令中的 /mnt/01_code/python/rosbag_analysis 替换为实际的项目路径。执行该命令后，pipreqs 将扫描指定目录下的所有 Python 文件，查找所有的外部库依赖，并将它们输出到一个名为 requirements.txt 的文件中。
# 如果你仍然不能运行 pipreqs 命令，那可能是因为 pip 安装的可执行文件没有被添加到你的系统路径中。在这种情况下，你可能需要更新你的 PATH 环境变量，或者直接使用 pipreqs 的完全路径来运行它。
# 行时会检查必要的模块是否已经安装，如果没有，则会自动安装所需的模块。
def install_requirements():
    with open('requirements.txt', 'r') as f:
        for line in f:
            package = line.strip()
            package_name, required_version = package.split('==')
            try:
                dist = metadata.distribution(package_name)
                installed_version = dist.version
                if installed_version < required_version:
                    print(f'{package_name} {installed_version} 已安装, 但需要的版本为 {required_version}. 正在升级...')
                    subprocess.check_call(["python3", '-m', 'pip', 'install', package])
                elif installed_version > required_version:
                    pass
                    #print(f'{package_name} {installed_version} 已安装, 需要的版本为 {required_version}. 保持最新版本!')
                else:
                    pass
                    #print('{} ({}) 已安装'.format(dist.metadata['Name'], dist.version))
            except metadata.PackageNotFoundError:
                print('{} 尚未安装. 正在自动安装...'.format(package))
                subprocess.check_call(["python3", '-m', 'pip', 'install', package])